<?
/*
	Front controller

@author		Jelle Versele
@email		me@jelleversele.be

*/

// required files

require_once('controller/request.class.php');
require_once('controller/router.class.php');
require_once('controller/dispatcher.class.php');


class controller_front{
	/*
		houdt de instantie van de klasse bij
		(singleton implementatie)
	*/
	private static $instance;
	/*
		Zorgt voor het opsplitsen van de url
		@var	controller_router
	*/
	private $router;
	/*
		Zorgt voor het laden van de juiste controller
		aan de hand van het door de router opgevulde 
		controller_request object
		@var	controller_dispatcher
	*/
	private $dispatcher;
	/*
		houdt alle request informatie vast zoals
		controller naam, actie, parameters. 
		@var	controller_request
	*/
	private $request;
	/*
		path naar de controllers
		@var	mixed (string of array)
	*/	
	private $controllerDir;
	
	/*
		controller die wordt geroepen als er geen andere optie is
		@var	string
	*/
	private $defaultController;
	/*
		zelfde als hierboven maar dan voor de action
		@var	string
	*/
	private $defaultAction;
	/*
		deel van de url dat niet gebruikt kan worden voor het routen
		@var	string
	*/
	private $baseUrl;
	
	private $db;
	
	
	/*
		instantie van de klasse ophalen
	*/
	public static function getInstance(){
	
		if(self::$instance == NULL){
			self::$instance = new self();
		}
		
		return self::$instance;
	}
	
	public function __construct(){
	
		$this -> defaultController = 'index';
		$this -> defaultAction = 'index';
		
	
	}
		
	public function getDefaultController(){
	
		return $this -> defaultController;
	
	}
	
	public function getDefaultAction(){
	
		return $this -> defaultAction;
	
	}
	
	
	public function setbaseUrl($iUrl){
	
		$this -> baseUrl = $iUrl;
	
	}
	
	public function getBaseUrl(){
	
		return $this -> baseUrl;
	
	}
		
	public function setControllerDir($iDir){
		
		
			
			
			$this -> controllerDir = $iDir;
		
			
	
	
	}
	
	
	public function getControllerDir(){

		return $this -> controllerDir;
	
	}
	
	/*
		hier wordt heel het proces gestart 
	*/
	public function showController(){
		
		// nieuw request object aanmaken
		$this -> request = new controller_request();
		// instantie van de router ophalen
		$router = controller_router::getInstance($this);
		/* 
			de router zijn werk laten doen we geven het object van 
			deze klasse mee omdat er heel wat parameters zijn die we hieruit nodig hebben
		*/
		$router -> route();
		/* 	controller, action en eventuele module zijn bepaald en zitten in het request object
			nu kan de dispatcher zijn werk doen.
		*/
		
		
		$dispatcher = controller_dispatcher::getInstance($this);
		
		$dispatcher -> dispatch();
		
		
	
		
	}
	
	public function getRequest(){
	
		return $this -> request;
	
	}
	
	public function setDbObj(mysqli $db){
	
		$this -> db = $db;
	
	}
	
	
	public function getDbObj(){
	
		return $this -> db;
		
	}

}


?>